package advanced进阶;

/**
 * 1.synchronized是一个乐观锁，也是一个悲观锁（看锁的竞争程度逐渐升级）
 * 2.synchronized不是读写锁，是普通的互斥锁
 * 3.synchronized既是轻量级锁，又是重量级锁（看锁的竞争程度逐渐升级）
 * 4.synchronized最开始是自旋锁（自旋锁也是轻量级锁），后面逐渐升级
 * 5.非公平锁
 * 6.可重入锁
 *
 * 偏向锁：并不是真正的锁，代表对某个线程有一定的偏向
 * 偏向锁是一个标志，在对象头，存储当前锁偏向的线程，当一个线程访问时，会先判断这个标志是否等于当前线程
 * 如果等于当前线程，那就直接获得锁，如果为空，就把当前锁的对象头设置成自己，假如不等于自己，锁就会升级
 * synchronized 锁升级：无锁->偏向锁->自旋锁（轻量级锁）->重量级锁
 * 重量级锁：自旋达到一定的次数，或者竞争者增多，会被升级为重量级锁
 *
 * synchronized性能不比ReentrantLock差，建议使用synchronized，大多情况下synchronized就够用了
 *
 * synchronized的原理：
 *   1.synchronized的特性
 *      原子性
 *      内存可见性
 *      有序性（指令重排序）
 *      非公平锁
 *      可重入锁
 *      不可中断（不是指线程不能中断，而是指当拿不到锁的时候，这个阻塞的过程不可以中断）
 *   2.synchronized的使用
 *      修饰代码块
 *      修饰普通方法
 *      修饰静态方法
 *   3.synchronized的锁机制
 *      锁升级，锁消除，锁粗化
 *   4.synchronized的实现
 *      获取monitor 每个对象都有一个monitor与之关联的monitor = > 监视器锁
 *
 */
public class synchronized原理 {
}
